﻿import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;

import org.apache.commons.codec.binary.Hex;





public class http_get_demo {
	
	
	
	
	
	public static void main(String[] args) throws Exception {
		
		
////		获取电影列表
//		String url ="http://localhost:8096/api/film/getByPlayctfilmlist";
//		String param="limit=9";
//		String s = http_get_demo.sendGet(url, param);
//		System.out.println(s);
//		
////		获取单个电影信息
//		String url2 ="http://localhost:8096/api/film/getfilminfo";
//		String param2="filmid=59a15177c29e8e0b551e4a4f";
//		String s2 = http_get_demo.sendGet(url2, param2);
//		System.out.println(s2);
		
		
		
//		获取播放地址
		String objectid ="5969dfead44afd4697585221";
		http_get_demo.getvideoURL(objectid);
    }
/**
 * 发送获取电影链接请求
 * 
 */
	public static void getvideoURL(String objectid) throws Exception{
//		电影id

//		当前时间：当前时间需与服务同步，不可超出或低于标准时间半小时以上
//		String datetime=String.valueOf((System.currentTimeMillis() / 1000));
		String datetime=String.valueOf(1505991648);
//		明key：此key需传入到url中，并需要与SecretKey进行联合加密
		String key ="123456";
//		私key：请谨慎保管此key，此key只有您与我们知道。
		String SecretKey ="654321";
//		拼接需要签名的字符串
		String toSignStr = String.format("%s%s%s%s", objectid, datetime, key,SecretKey);
		System.out.println("toSignStr:"+toSignStr);
//		将字符串进行sha1算法
		String signedStr =getSha1(toSignStr);
		System.out.println("signedStr:"+signedStr);
//		您系统中的用户名称
		String username = "test";
//		真实用户的ip地址
		String userip = "127.0.0.1";
//		拼接MD5签名验证的字符串
        String toVerifyStr = String.format("%s%s%s%s%s%s", objectid, datetime, key,signedStr,username,userip);
        System.out.println("toVerifyStr:"+toVerifyStr);
//      调用md5加密并转换为16进制的字符串
        String verifyedStr=encoderByMd5(toVerifyStr);
        System.out.println("verifyedStr:"+verifyedStr);
//      拼接参数请求
		String param = String.format("%s&%s&%s&%s&%s&%s&%s", "objectid="+objectid, "datetime="+datetime, "key="+key,"sign="+signedStr,"username="+username,"userip="+userip,"verify="+verifyedStr);
		System.out.println("param:"+param);
        //发送 GET 请求
        String s=http_get_demo.sendGet("http://localhost:8096/api/verify/getvideoURL", param);
        System.out.println(s);
	}
	
	
	/**
     * 向指定URL发送GET方法的请求
     * 
     * @param url
     *            发送请求的URL
     * @param param
     *            请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常！" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }
    
    
    
    
    
    /**
     * md5加密并转换为16进制的字符串
     * 
     * @param str
     *            需要加密的参数
     * @return md5Str 16进制md5字符串
     */
    public static String encoderByMd5(String str) throws Exception{
        //确定计算方法
        MessageDigest md5=MessageDigest.getInstance("MD5");
        byte[] bs = md5.digest(str.getBytes());
        String md5Str=Hex.encodeHexString(bs);
        return md5Str;
    }
    
    
    /**
     * sha1加密并转换为16进制的字符串
     * 
     * @param str
     *            需要加密的参数
     * @return sha1Str 16进制sha1字符串
     * @throws Exception 
     */
    public static String getSha1(String str) throws Exception{
        if (null == str || 0 == str.length()){
            return null;
        }
      
        	//确定计算方法
            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
//            编码方式
            mdTemp.update(str.getBytes("UTF-8"));
//			sha1加密结果
            byte[] md = mdTemp.digest();
            String sha1Str=Hex.encodeHexString(md);
            return sha1Str;
    }
}
